import pygame.font
from pygame.sprite import Group

from ship import Ship
class Scoreboard:
    '''显示得分信息的类'''

    def __init__(self,ai_game):
        '''初始化显示得分涉及的属性'''
        self.ai_game = ai_game
        self.screen = ai_game.screen
        self.screen_rect = self.screen.get_rect()
        self.settings= ai_game.settings
        self.stats = ai_game.stats

        # 显示得分信息时使用的字体设置
        self.text_color = (255,255,255)
        self.font = pygame.font.Font('font/MSYH.TTF', 36)
        # 准备包含最高得分和当前得分的图像
        self.prep_score()
        self.prep_high_score()
        self.prep_level()
        self.prep_ships()

    def prep_score(self):
        """将得分转换为一幅渲染的图像"""
        rounded_score = round(self.stats.score,-1)
        score_str = "{:,}".format(rounded_score)
        self.score_image = self.font.render("当前得分："+score_str,True,self.text_color)

        # 在屏幕右上角显示得分
        self.score_rect = self.score_image.get_rect()
        self.score_rect.right= self.screen_rect.right-20
        self.score_rect.top = 20

    def check_high_score(self):
        """检查是否产生了最高分"""
        if self.stats.score > self.stats.high_score:
            self.stats.high_score = self.stats.score
            self.prep_high_score()

    def prep_high_score(self):
        """将最高得分转换为一幅渲染的图像"""
        rounded_score = round(self.stats.high_score, -1)
        high_score_str = "{:,}".format(rounded_score)
        self.h_score_image = self.font.render("最高得分：" + high_score_str, True, self.text_color)

        # 在屏幕正上角显示得分
        self.h_score_rect = self.h_score_image.get_rect()
        self.h_score_rect.midtop = self.screen_rect.midtop
        self.h_score_rect.top = 20

    def prep_level(self):
        """将等级转换为一幅渲染的图像"""
        rounded_score = str(self.stats.level)
        self.level_image = self.font.render("当前等级：" + rounded_score, True, self.text_color)
        # 将等级放在得分下方
        self.level_rect = self.level_image.get_rect()
        self.level_rect.right = self.score_rect.right
        self.level_rect.top = self.score_rect.bottom + 10

    def prep_ships(self):
        """显示还剩下多少飞船"""
        self.ships = Group()
        for ship_number in range(self.stats.ship_left):
            ship = Ship(self.ai_game)
            ship.rect.x = 10 + ship_number * ship.rect.width
            ship.rect.y = 10
            self.ships.add(ship)

    def show_score(self):
        """在屏幕上更新得分和剩余的飞船数"""
        self.screen.blit(self.score_image, self.score_rect)
        self.screen.blit(self.h_score_image, self.h_score_rect)
        self.screen.blit(self.level_image, self.level_rect)
        self.ships.draw(self.screen)
